#include"../header/Load.h"

bool Load(Joueur *j1, Joueur *j2) {

	ifstream fichier("save.txt", ios::in);
	string nom;
	string nomPion;

	int robot;
	int tour;
	int x;
	int y;
	int num;
	int score;
	int nbPion;
	bool inaugu;
	bool face;
	bool type = false;

	if (fichier) {
		if (fichier.eof() == 0) {

			//on saute le booleen robot
			fichier >> robot;

			//on charge les cordonnees de Impala
			fichier >> x;
			fichier >> y;
			j1->getMap()->getImpala()->setPosX(x);
			j1->getMap()->getImpala()->setPosY(y);

			//on charge les info du joueur1
			nom = "";
			fichier >> nom;

			if (nom.compare("") != 0) {
				j1->setNom(nom);
				fichier >> num;
				j1->setNumero(num);
				fichier >> score;
				j1->setScore(score);
				fichier >> nbPion;
				j1->setNbPion(nbPion);
				fichier >> inaugu;
				j1->setInauguration(inaugu);
				if (nbPion > 0) {
					for (int i = 0; i < nbPion; i++) { //on charge la main du joueur 1
						fichier >> nomPion;
						if (nomPion.compare("Gazelle") == 0) {
							j1->getMain()[i] = new Gazelle(num);

						}
						if (nomPion.compare("Lion") == 0) {
							j1->getMain()[i] = new Lion(num);
						}
						if (nomPion.compare("Zebre") == 0) {
							j1->getMain()[i] = new Zebre(num);
						}
						if (nomPion.compare("Elephant") == 0) {
							j1->getMain()[i] = new Elephant(num);
						}
						if (nomPion.compare("Croco") == 0) {
							j1->getMain()[i] = new Croco(num);
						}
					}
				}
				if (nbPion < 15) { //on remplit le reste de la main a null
					for (int i = nbPion; i < 15; i++) {
						j1->getMain()[i] = NULL;
					}
				}

			}

			nom = "";
			nomPion = "";

			//on charge pour le joueur 2 si il existe
			fichier >> nom;
			if (nom.compare("") != 0) {
				j2->setNom(nom);
				fichier >> num;
				j2->setNumero(num);
				fichier >> score;
				j2->setScore(score);
				fichier >> nbPion;
				j2->setNbPion(nbPion);
				fichier >> inaugu;
				j2->setInauguration(inaugu);
				if (nbPion > 0) {
					for (int i = 0; i < nbPion; i++) { //on charge la main du joueur 1
						fichier >> nomPion;
						if (nomPion.compare("Gazelle") == 0) {
							j2->getMain()[i] = new Gazelle(num);
						}
						if (nomPion.compare("Lion") == 0) {
							j2->getMain()[i] = new Lion(num);
						}
						if (nomPion.compare("Zebre") == 0) {
							j2->getMain()[i] = new Zebre(num);
						}
						if (nomPion.compare("Elephant") == 0) {
							j2->getMain()[i] = new Elephant(num);
						}
						if (nomPion.compare("Croco") == 0) {
							j2->getMain()[i] = new Croco(num);
						}
					}
				}
				if (nbPion < 15) { //on remplit le reste de la main a null
					for (int i = nbPion; i < 15; i++) {
						j2->getMain()[i] = NULL;
					}
				}

			}
			//on charge le tour des joueurs
			fichier >> tour;
			j1->getMap()->setTour(tour);

			//on charge le type de map

			fichier >> type;
			j1->getMap()->setPresident(type);

			//on charge la map
			nomPion = "";
			fichier >> nomPion;
			for (int i = 1; i < 6; i++) {
				for (int j = 1; j < 7; j++) {
					cout << "nP :" << nomPion << endl;
					if (nomPion.compare(".") == 0) { // cas ou la case est vide
						j1->getMap()->getPlateau(i, j)->setP(NULL);

						nomPion = "";
						fichier >> nomPion;
						nomPion = "";
						fichier >> nomPion;
						nomPion = "";
						fichier >> nomPion;

					} else {
						fichier >> num;
						fichier >> face;
						cout << "num =" << num << endl;
						cout << "face =" << face << endl;
						if (nomPion.compare("Gazelle") == 0) { //cas ou il y a un pion dans la case
							nomPion = "";
							fichier >> nomPion;

							j1->getMap()->getPlateau(i, j)->setP(
									new Gazelle(num));
							j1->getMap()->getPlateau(i, j)->getP()->setFace(
									face);
							j1->getMap()->getPlateau(i, j)->setCaseVide(false);

						}
						else if (nomPion.compare("Lion") == 0) {
							nomPion = "";
							fichier >> nomPion;
							j1->getMap()->getPlateau(i, j)->setP(new Lion(num));
							j1->getMap()->getPlateau(i, j)->getP()->setFace(
									face);
							j1->getMap()->getPlateau(i, j)->setCaseVide(false);

						}
						else if (nomPion.compare("Zebre") == 0) {
							nomPion = "";
							fichier >> nomPion;
							j1->getMap()->getPlateau(i, j)->setP(
									new Zebre(num));
							j1->getMap()->getPlateau(i, j)->getP()->setFace(
									face);
							j1->getMap()->getPlateau(i, j)->setCaseVide(false);
						}
						else if (nomPion.compare("Elephant") == 0) {
							nomPion = "";
							fichier >> nomPion;
							j1->getMap()->getPlateau(i, j)->setP(
									new Elephant(num));
							j1->getMap()->getPlateau(i, j)->getP()->setFace(
									face);
							j1->getMap()->getPlateau(i, j)->setCaseVide(false);

						}
						else if (nomPion.compare("Croco") == 0) {
							nomPion = "";
							fichier >> nomPion;
							j1->getMap()->getPlateau(i, j)->setP(
									new Croco(num));
							j1->getMap()->getPlateau(i, j)->getP()->setFace(
									face);
							j1->getMap()->getPlateau(i, j)->setCaseVide(false);

						}
					}

				}

			}

		} else {
			cout << "Le fichier est vide, pas de sauvegarde" << endl;
			return false;
		}
	} else {
		cout << "Impossible d'ouvrir le fichier." << endl;
		return false;
	}
	fichier.close();
	return true;
}

int robotLoad() {
	ifstream fichier("save.txt", ios::in);

	int robot = 0;

	if (fichier) {
		if (fichier.eof() == 0) {

			fichier >> robot;
		}
	}
	fichier.close();
	return robot;
}
